namespace go example.shorten.url

// 引入基础Thrift文件，通常包含通用的响应结构
include "base.thrift"

/**
 * Url结构体用于表示URL信息
 * 字段包括：
 * - id: URL的唯一标识符
 * - url: 原始的长URL
 * - short_url: 缩短后的URL
 * - hits: 该缩短URL被访问的次数
 */
struct Url {
  1: i64 id
  2: string long_url
  3: string short_url
  4: i64 hits
}

/**
 * GetUrlReq结构体用于请求获取URL信息
 * 包含一个必需的字段：
 * - url: 要获取的URL的long_url或short_url
 */
struct GetUrlReq {
  1: required string url
}

/**
 * GetUrlResp结构体用于响应获取URL信息的请求
 * 包含两个字段：
 * - url: 对应的URL信息
 * - baseResp: 基础响应结构，通常包含响应码和消息等信息
 */
struct GetUrlResp {
  1: Url url
  255: base.BaseResp baseResp
}

/**
 * GenerateUrlReq结构体用于请求生成一个新的缩短URL
 * 包含一个字段：
 * - url: 需要被缩短的原始URL
 */
struct GenerateUrlReq {
  1: string url
}

/**
 * GenerateUrlResp结构体用于响应生成缩短URL的请求
 * 包含两个字段：
 * - short_url: 生成的缩短URL
 * - baseResp: 基础响应结构，通常包含响应码和消息等信息
 */
struct GenerateUrlResp {
  1: string short_url
  255: base.BaseResp baseResp
}

/**
 * UrlService服务定义，提供了两个方法：
 * - GetUrl: 根据ID获取URL信息
 * - GenerateUrl: 生成一个新的缩短URL
 */
service UrlService {
  GetUrlResp GetUrl(1: GetUrlReq req)
  GenerateUrlResp GenerateUrl(1: GenerateUrlReq req)
}